#include <iostream>
using namespace std;

unsigned int rightrotate(unsigned int bil, unsigned int n)
{
	unsigned int a = bil >> n, b = bil & (((unsigned int)1 << n)-1);
	return (a | (b << (32 - n)));
}

char heksa (int x)
{
	if (x < 10)
		return x + 48;
	return x + 55;
}

void tulis_bit(int a)
{
	int i;
	for (i=31; i>=0; --i)
	{
		//system("PAUSE");
		cout << ((a >> i) & 1);
		if (i%8==0)
			cout << " ";
	}
}

unsigned int abs(char a)
{
	if (a < 0)
		return 0-a;
	else
		return a;
}

string SHA(unsigned short *Awal, unsigned long long panjang)
{
	unsigned int a, b, c, d, e, f, g, h, i, j, maj, ch, t1, t2;
	unsigned long long length = panjang, plus;
	string hasil = "";
	//Initialize variables (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
	unsigned int H[8] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
	//Initialize table of round constants (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):
	unsigned int k[64] = {0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
				 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
				 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
				 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
				 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
				 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
				 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
				 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2};

	//Pre-processing:
	
	plus = (length+1) % 64;
	if (plus <= 56)
		plus = 56-plus;
	else
		plus = 120-plus;
	// for (i=0; i<plus; ++i)
		// awal += (char)0;
	// for (i=64; i>=8; )
	// {
		// i -= 8;
		// awal += (char)(((length << 3) >> i) & 255);
	// }
	length += plus+9;
	
	unsigned short awal[length];
	for (i=0; i<panjang; ++i)
		awal[i] = Awal[i];
	awal[panjang] = (unsigned short) 1 << 7;
	for (i=1; i<=plus; ++i)
		awal[panjang+(unsigned long long)i] = 0;
	cout << panjang << " " << length << ">>?\n";
	j = 0;
	for (i=64; i>=8; )
	{
		i -= 8;
		++j;
		cout << panjang+(unsigned long long)plus+j << endl;
		awal[panjang+(unsigned long long)plus+j] = (((panjang << 3) >> i) & 255);
	}
	cout << panjang << " " << length << ">>?\n";
	for (i=0; i<length; ++i)
		cout << awal[i] << " ";
	cout << "............\n";
	//Process the message in successive 512-bit chunks:
	unsigned int w[64], s[2];
	for (j=0; j<length; )
	{
		for (i=0; i<16; ++i)
		{
			w[i] = (awal[j] << 24) | (awal[++j] << 16) | (awal[++j] << 8) | (awal[++j]);
			++j;
		}
		
		//Extend the sixteen 32-bit words into sixty-four 32-bit words:
		for (i=16; i<64; ++i)
		{
			s[0] = rightrotate(w[i-15], 7) ^ rightrotate(w[i-15], 18) ^ (w[i-15] >> 3);
			s[1] = rightrotate(w[i-2], 17) ^ rightrotate(w[i-2], 19) ^ (w[i-2] >> 10);
			w[i] = w[i-16] + s[0] + w[i-7] + s[1];
		}

		//Initialize hash value for this chunk:
		a = H[0];
		b = H[1];
		c = H[2];
		d = H[3];
		e = H[4];
		f = H[5];
		g = H[6];
		h = H[7];
		
		//Main loop:
		for (i=0; i<64; ++i)
		{
			s[0] = rightrotate(a, 2) ^ rightrotate(a, 13) ^ rightrotate(a, 22);
			maj = (a & b) ^ (a & c) ^ (b & c);
			t2 = s[0] + maj;
			s[1] = rightrotate(e, 6) ^ rightrotate(e, 11) ^ rightrotate(e, 25);
			ch = (e & f) ^ ((~ e) & g);
			t1 = h + s[1] + ch + k[i] + w[i];

			h = g;
			g = f;
			f = e;
			e = d + t1;
			d = c;
			c = b;
			b = a;
			a = t1 + t2;
		}

		//Add this chunk's hash to result so far:
		H[0] = H[0] + a;
		H[1] = H[1] + b;
		H[2] = H[2] + c;
		H[3] = H[3] + d;
		H[4] = H[4] + e;
		H[5] = H[5] + f;
		H[6] = H[6] + g;
		H[7] = H[7] + h;
	}

	//Produce the final hash value (big-endian):
	for (i=0; i<8; ++i)
	{
		for (j=32; j>=4; )
		{
			j -= 4;
			hasil += heksa((H[i] >> j) & 15);
		}
		hasil += " ";
	}
	return hasil;
}

int main()
{
	string awal;
	cin >> awal;
	
	unsigned long long i, panjang = awal.length();
	unsigned short Awal[panjang+1];
	
	for (i=0; i<panjang; ++i)
		Awal[i] = abs(awal[i]);
	cout << "hasilnya = " << SHA(Awal, panjang) << "\n";
	//cout << "hasilnya = " << SHA("The quick brown fox jumps over the lazy cog") << "\n";;

	return 0;
}
